package com.funsport.service;

import com.funsport.entity.User;
import java.util.Map;

/**
 * 积分服务接口
 *
 * @author Fun-Sport Team
 */
public interface IPointsService {

    /**
     * 增加用户积分
     *
     * @param userId 用户ID
     * @param points 积分数量
     * @param reason 获得原因
     * @param relatedType 关联类型（event/club等）
     * @param relatedId 关联ID
     * @return 是否操作成功
     */
    boolean addUserPoints(Long userId, Integer points, String reason, String relatedType, Long relatedId);

    /**
     * 扣除用户积分
     *
     * @param userId 用户ID
     * @param points 积分数量
     * @param reason 扣除原因
     * @return 是否操作成功
     */
    boolean deductUserPoints(Long userId, Integer points, String reason);

    /**
     * 增加俱乐部积分
     *
     * @param clubId 俱乐部ID
     * @param points 积分数量
     * @param userId 贡献者ID
     * @param reason 获得原因
     * @return 是否操作成功
     */
    boolean addClubPoints(Long clubId, Integer points, Long userId, String reason);

    /**
     * 根据积分计算等级
     *
     * @param points 积分数量
     * @return 等级
     */
    int calculateLevel(Integer points);

    /**
     * 根据积分计算俱乐部等级
     *
     * @param points 积分数量
     * @return 等级
     */
    int calculateClubLevel(Integer points);

    /**
     * 获取用户等级详细信息
     *
     * @param points 当前积分
     * @return 等级信息
     */
    Map<String, Object> getUserLevelInfo(Integer points);

    /**
     * 奖励活动相关积分
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @param action 动作类型（signup/attend/create）
     * @return 是否操作成功
     */
    boolean awardEventPoints(Long userId, Long eventId, String action);

    /**
     * 奖励俱乐部相关积分
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @param action 动作类型（join/create）
     * @return 是否操作成功
     */
    boolean awardClubPoints(Long userId, Long clubId, String action);
}

